/**
 * 构造者模式
 */
package creationtype.builderpattern;
//将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。
//抽象建造者类中定义了产品的创建方法和返回方法;
//
//建造者模式的结构中还引入了一个指挥者类Director，该类的作用主要有两个：一方面它隔离了客户与生产过程；
// 另一方面它负责控制产品的生成过程。
// 指挥者针对抽象建造者编程，客户端只需要知道具体建造者的类型，即可通过指挥者类调用建造者的相关方法，返回一个完整的产品对象
//
//在客户端代码中，无须关心产品对象的具体组装过程，只需确定具体建造者的类型即可，建造者模式将复杂对象的构建与对象的表现分离开来，
// 这样使得同样的构建过程可以创建出不同的表现

//建造者模式是一步一步创建一个复杂的对象，它允许用户只通过指定复杂对象的类型和内容就可以构建它们，用户不需要知道内部的具体构建细节。
// 建造者模式属于对象创建型模式。根据中文翻译的不同，建造者模式又可以称为生成器模式


//缺点
//        建造者模式所创建的产品一般具有较多的共同点，其组成部分相似，如果产品之间的差异性很大，则不适合使用建造者模式，因此其使用范围受到一定的限制。
//        如果产品的内部变化复杂，可能会导致需要定义很多具体建造者类来实现这种变化，导致系统变得很庞大。